/**
 * Copyright (c) 2009-2011, chunquedong(YangJiandong)
 * 
 * This file is part of ChunMap project
 * Licensed under the GNU LESSER GENERAL PUBLIC LICENSE(Version >=3)
 * 
 * History:
 *     2010-05-05  Jed Young  Creation
 */
package chunmap.view;
//
//import chunmap.model.coord.Coordinate2D;
//import chunmap.model.coord.Position;
//import chunmap.model.coord.Transform;
//import chunmap.model.crs.transf.AffineTransform;
//import chunmap.model.elem.Envelope;
//
///**
// * 当前活动视图，提供渲染所需的坐标变换等信息。
// * @author chunquedong
// * 
// */
//public class ActiveView implements View {
//
//	private double scale;
//	private Position center;
//	private int height;
//	private int width;
//	private AffineTransform transform;
//	private Envelope viewEnvelop;
//
//	public ActiveView(int width, int height) {
//		reset(width, height);
//	}
//
//	public void reset(int width, int height) {
//		this.height = height;
//		this.width = width;
//		viewEnvelop = new Envelope(0, 0, width, height);
//		transform = AffineTransform.unit();
//		center = new Coordinate2D(width / 2d, height / 2d);
//		scale = 1;
//		center = viewEnvelop.getCenter();
//	}
//
//	private AffineTransform getSymmetryTransform() {
//		AffineTransform t1 = AffineTransform.symmetry(1, 0, 0, -1);
//		AffineTransform t2 = AffineTransform.pan(0, height);
//		return t1.accumulate(t2);
//	}
//
//	// ------------------------------------------------------------getter,setter
//
//	public double getScale() {
//		return scale;
//	}
//
//	public Position getCenter() {
//		return center;
//	}
//
//	public void setCenter(Position center) {
//		double dx = this.center.getX() - center.getX();
//		double dy = this.center.getY() - center.getY();
//		pan(dx, dy);
//	}
//
//	public int getHeight() {
//		return height;
//	}
//
////	public void setHeight(int height) {
////		this.height = height;
////	}
//
//	public int getWidth() {
//		return width;
//	}
//
////	public void setWidth(int width) {
////		this.width = width;
////	}
//
//	public AffineTransform getTransform() {
//		return transform;
//	}
//
//	public void setTransform(AffineTransform transform) {
//		this.transform = transform;
//	}
//
//	public Transform getReTransform() {
//		return transform.getReverseTransform();
//	}
//
//	/**
//	 * 实际坐标
//	 */
//	public synchronized void setEnvelop(Envelope envelop) {
//		reset(width, height);
//
//		setCenter(envelop.getCenter());
//
//		double s = computeScale(envelop);
//		scale(new Coordinate2D(width / 2d, height / 2d), s, s);
//
//		transform = transform.accumulate(getSymmetryTransform());
//	}
//
//	public Envelope getEnvelop() {
//		return viewEnvelop;
//	}
//
//	// ------------------------------------------------------------坐标操作
//	public synchronized void pan(double dx, double dy) {
//		AffineTransform trans = AffineTransform.pan(dx, dy);
//		transform = transform.accumulate(trans);
//
//		Envelope wEnvelop = new Envelope(0, 0, width, height);
//		viewEnvelop = wEnvelop.transform(transform.getReverseTransform());
//
//		center = viewEnvelop.getCenter();
//	}
//	/**
//	 * 图上坐标
//	 * @param p
//	 * @param sx
//	 * @param sy
//	 */
//	public synchronized void scale(Position p, double sx, double sy) {
//
//		AffineTransform otransform = transform;
//		Envelope tEnvelop;
//
//		AffineTransform trans = AffineTransform.scale(p.getX(), p.getY(), sx,
//				sy);
//		otransform = otransform.accumulate(trans);
//
//		Envelope wEnvelop = new Envelope(0, 0, width, height);
//
//		try {// 计算逆矩阵有风险
//			tEnvelop = wEnvelop.transform(otransform.getReverseTransform());
//		} catch (Exception ex) {
//			return;
//		}
//
//		viewEnvelop = tEnvelop;
//		transform = otransform;
//		center = viewEnvelop.getCenter();
//		scale = width / viewEnvelop.getWidth();
//	}
//
//	private double computeScale(Envelope envelop) {
//		double expectedEnvelopHeight = envelop.getMaxY() - envelop.getMinY();
//		double expectedEnvelopWidth = envelop.getMaxX() - envelop.getMinX();
//		double s1 = height / expectedEnvelopHeight;
//		double s2 = width / expectedEnvelopWidth;
//
//		return Math.min(s1, s2);
//	}
//
//	@Override
//	public double dis2Screen(double d) {
//		// TODO Auto-generated method stub
//		return 0;
//	}
//
//	@Override
//	public double dis2World(double d) {
//		// TODO Auto-generated method stub
//		return 0;
//	}
//
//	@Override
//	public Envelope getBufferEnvelop() {
//		// TODO Auto-generated method stub
//		return null;
//	}
//
//	@Override
//	public Envelope getViewEnvelop() {
//		// TODO Auto-generated method stub
//		return null;
//	}
//
//	@Override
//	public void resetSize(int width, int height) {
//		// TODO Auto-generated method stub
//		
//	}
//
//	@Override
//	public Transform screen2World() {
//		// TODO Auto-generated method stub
//		return null;
//	}
//
//	@Override
//	public void setScale(double s) {
//		// TODO Auto-generated method stub
//		
//	}
//
//	@Override
//	public void setViewEnvelop(Envelope env) {
//		// TODO Auto-generated method stub
//		
//	}
//
//	@Override
//	public Transform world2Screen() {
//		// TODO Auto-generated method stub
//		return null;
//	}
//
//	@Override
//	public double x2Screen(double x) {
//		// TODO Auto-generated method stub
//		return 0;
//	}
//
//	@Override
//	public double x2World(double x) {
//		// TODO Auto-generated method stub
//		return 0;
//	}
//
//	@Override
//	public double y2Screen(double y) {
//		// TODO Auto-generated method stub
//		return 0;
//	}
//
//	@Override
//	public double y2World(double y) {
//		// TODO Auto-generated method stub
//		return 0;
//	}
//
//	@Override
//	public void zoom(double s, double x, double y) {
//		// TODO Auto-generated method stub
//		
//	}
//}